home *** CD-ROM | disk | FTP | other *** search
/ ADA Programming Guide / ADA Programming Guide.iso / adatutor / lrmrdr / chapac.doc < prev    next >
Text File  |  1996-01-30  |  13KB  |  395 lines

  1.  
  2.  
  3.  
  4.  
  5.  
  6. The following document is a draft  of  the  corresponding  chapter  of  the
  7. version  of  the  Ada  Reference  Manual  produced  in response to the Ansi
  8. Canvass.  It is given a limited circulation  to  Ada  implementers  and  to
  9. other groups contributing comments (according to the conventions defined in
  10. RRM.comments).  This draft should not be referred to in any publication.
  11.  
  12.  
  13.  
  14.                        ANSI-RM-C-v23 - Draft Chapter
  15.                     C  Predefined Language Environment
  16.                                 version 23
  17.  
  18.  
  19.                                  83-02-11
  20.  
  21.  
  22. This version has addressed all comments up to #5795
  23.  
  24.  
  25.  
  26.  
  27.  
  28.  
  29.  
  30.  
  31.  
  32.  
  33.  
  34.  
  35.  
  36.  
  37.  
  38.  
  39.  
  40.  
  41.  
  42.  
  43.  
  44.  
  45.  
  46.  
  47.  
  48.  
  49.  
  50.  
  51.  
  52.  
  53.  
  54.  
  55.  
  56.  
  57.  
  58.  
  59.  
  60.  
  61.  
  62.  
  63.  
  64.  
  65.  
  66.  
  67.  
  68.  
  69.  
  70.  
  71.  
  72.  
  73.  
  74.  
  75.  
  76.  
  77. >                     C. Predefined Language Environment
  78.  
  79.  
  80.  
  81.  
  82. This  annex  outlines  the specification of the package STANDARD containing
  83. all predefined identifiers in the language.  The corresponding package body
  84. is implementation-defined and is not shown.
  85.  
  86. The operators that are predefined for the types  declared  in  the  package
  87. STANDARD are given in comments since they are implicitly declared.  Italics
  88. are  used for  pseudo-names of anonymous types (such as universal_real) and
  89. for   undefined   information   (such   as    implementation_defined    and
  90. any_fixed_point_type).
  91.  
  92. package STANDARD is
  93.  
  94.    type BOOLEAN is (FALSE, TRUE);
  95.  
  96.    -- The predefined relational operators for this type are as follows:
  97.  
  98.    -- function "="   (LEFT, RIGHT : BOOLEAN) return BOOLEAN;
  99.    -- function "/="  (LEFT, RIGHT : BOOLEAN) return BOOLEAN;
  100.    -- function "<"   (LEFT, RIGHT : BOOLEAN) return BOOLEAN;
  101.    -- function "<="  (LEFT, RIGHT : BOOLEAN) return BOOLEAN;
  102.    -- function ">"   (LEFT, RIGHT : BOOLEAN) return BOOLEAN;
  103.    -- function ">="  (LEFT, RIGHT : BOOLEAN) return BOOLEAN;
  104.  
  105.    -- The predefined logical operators and the predefined logical negation operator are as follows:
  106.  
  107.    -- function "and" (LEFT, RIGHT : BOOLEAN) return BOOLEAN;
  108.    -- function "or"  (LEFT, RIGHT : BOOLEAN) return BOOLEAN;
  109.    -- function "xor" (LEFT, RIGHT : BOOLEAN) return BOOLEAN;
  110.  
  111.    -- function "not" (RIGHT : BOOLEAN) return BOOLEAN;
  112.  
  113.  
  114.  
  115.    -- The universal type universal_integer is predefined.
  116.  
  117.  
  118.    type INTEGER is IMPLEMENTATION_DEFINED;
  119.  
  120.    -- The predefined operators for this type are as follows:
  121.  
  122.    -- function "="  (LEFT, RIGHT : INTEGER) return BOOLEAN;
  123.    -- function "/=" (LEFT, RIGHT : INTEGER) return BOOLEAN;
  124.    -- function "<"  (LEFT, RIGHT : INTEGER) return BOOLEAN;
  125.    -- function "<=" (LEFT, RIGHT : INTEGER) return BOOLEAN;
  126.    -- function ">"  (LEFT, RIGHT : INTEGER) return BOOLEAN;
  127.    -- function ">=" (LEFT, RIGHT : INTEGER) return BOOLEAN;
  128.  
  129.    -- function "+"   (RIGHT : INTEGER) return INTEGER;
  130.    -- function "-"   (RIGHT : INTEGER) return INTEGER;
  131.    -- function "abs" (RIGHT : INTEGER) return INTEGER;
  132.  
  133.    -- function "+"   (LEFT, RIGHT : INTEGER) return INTEGER;
  134.    -- function "-"   (LEFT, RIGHT : INTEGER) return INTEGER;
  135.    -- function "*"   (LEFT, RIGHT : INTEGER) return INTEGER;
  136.    -- function "/"   (LEFT, RIGHT : INTEGER) return INTEGER;
  137.    -- function "rem" (LEFT, RIGHT : INTEGER) return INTEGER;
  138.    -- function "mod" (LEFT, RIGHT : INTEGER) return INTEGER;
  139.  
  140.    -- function "**"  (LEFT : INTEGER; RIGHT : INTEGER) return INTEGER;
  141.  
  142.       -- An implementation may provide additional predefined integer types.
  143.       It is recommended that -- the names of such additional types end with
  144.       INTEGER as in SHORT_INTEGER  or  LONG_INTEGER.  -- The  specification
  145.       of   each  operator  for  the  type  universal_integer,  or  for  any
  146.       additional -- predefined  integer  type,  is  obtained  by  replacing
  147.       INTEGER  by  the  name of the type  in  the -- specification  of  the
  148.       corresponding  operator  of the type INTEGER, except for the right --
  149.       operand of the exponentiating operator.
  150.  
  151.  
  152.       -- The universal type universal_real is predefined.
  153.  
  154.    type FLOAT is IMPLEMENTATION_DEFINED;
  155.  
  156.    -- The predefined operators for this type are as follows:
  157.  
  158.    -- function "="   (LEFT, RIGHT : FLOAT) return BOOLEAN;
  159.    -- function "/="  (LEFT, RIGHT : FLOAT) return BOOLEAN;
  160.    -- function "<"   (LEFT, RIGHT : FLOAT) return BOOLEAN;
  161.    -- function "<="  (LEFT, RIGHT : FLOAT) return BOOLEAN;
  162.    -- function ">"   (LEFT, RIGHT : FLOAT) return BOOLEAN;
  163.    -- function ">="  (LEFT, RIGHT : FLOAT) return BOOLEAN;
  164.  
  165.    -- function "+"   (RIGHT : FLOAT) return FLOAT;
  166.    -- function "-"   (RIGHT : FLOAT) return FLOAT;
  167.    -- function "abs" (RIGHT : FLOAT) return FLOAT;
  168.  
  169.    -- function "+"   (LEFT, RIGHT : FLOAT) return FLOAT;
  170.    -- function "-"   (LEFT, RIGHT : FLOAT) return FLOAT;
  171.    -- function "*"   (LEFT, RIGHT : FLOAT) return FLOAT;
  172.    -- function "/"   (LEFT, RIGHT : FLOAT) return FLOAT;
  173.  
  174.    -- function "**"  (LEFT : FLOAT; RIGHT : INTEGER) return FLOAT;
  175.  
  176.       -- An  implementation  may  provide  additional  predefined  floating
  177.       point  types.   It  is --  recommended   that   the   names  of  such
  178.       additional  types  end with FLOAT as in SHORT_FLOAT or -- LONG_FLOAT.
  179.       The specification of each operator for the type  universal_real,   or
  180.       for   any -- additional  predefined  floating point type, is obtained
  181.       by replacing FLOAT by the name of -- the type in the specification of
  182.       the  corresponding  operator  of  the  type  FLOAT.
  183.  
  184.       -- In addition, the following operators are predefined for  universal
  185.       types:
  186.  
  187.    -- function "*" (LEFT : universal_integer; RIGHT : universal_real)    return universal_real;
  188.    -- function "*" (LEFT : universal_real;    RIGHT : universal_integer) return universal_real;
  189.    -- function "/" (LEFT : universal_real;    RIGHT : universal_integer) return universal_real;
  190.  
  191.    -- The type universal_fixed is predefined.  The only operators declared for this type are
  192.  
  193.    -- function "*" (LEFT : any_fixed_point_type; RIGHT : any_fixed_point_type) return universal_fixed;
  194.    -- function "/" (LEFT : any_fixed_point_type; RIGHT : any_fixed_point_type) return universal_fixed;
  195.  
  196.  
  197.       --  The  following  characters  form  the  standard  ASCII  character
  198.       set.   Character  literals -- corresponding to control characters are
  199.       not  identifiers;   they  are  indicated  in  italics  in   --   this
  200.       definition.
  201.  
  202.    type CHARACTER is
  203.  
  204.           (nul,  soh,  stx,  etx,     eot,  enq,  ack,  bel,
  205.            bs,   ht,   lf,   vt,      ff,   cr,   so,   si,
  206.            dle,  dc1,  dc2,  dc3,     dc4,  nak,  syn,  etb,
  207.            can,  em,   sub,  esc,     fs,   gs,   rs,   us,
  208.  
  209.            ' ',  '!',  '"',  '#',     '$',  '%',  '&',  ''',
  210.            '(',  ')',  '*',  '+',     ',',  '-',  '.',  '/',
  211.            '0',  '1',  '2',  '3',     '4',  '5',  '6',  '7',
  212.            '8',  '9',  ':',  ';',     '<',  '=',  '>',  '?',
  213.  
  214.            '@',  'A',  'B',  'C',     'D',  'E',  'F',  'G',
  215.            'H',  'I',  'J',  'K',     'L',  'M',  'N',  'O',
  216.            'P',  'Q',  'R',  'S',     'T',  'U',  'V',  'W',
  217.            'X',  'Y',  'Z',  '[',     '\',  ']',  '^',  '_',
  218.  
  219.            '`',  'a',  'b',  'c',     'd',  'e',  'f',  'g',
  220.            'h',  'i',  'j',  'k',     'l',  'm',  'n',  'o',
  221.            'p',  'q',  'r',  's',     't',  'u',  'v',  'w',
  222.            'x',  'y',  'z',  '{',     '|',  '}',  '',   del);
  223.  
  224.  
  225.        for CHARACTER use  --  128 ASCII character set without holes
  226.              (0, 1, 2, 3, 4, 5, ..., 125, 126, 127);
  227.  
  228.        -- The predefined operators for the type CHARACTER are the same as for any enumeration type.
  229.  
  230.    package ASCII is
  231.  
  232.       --  Control characters:
  233.  
  234.       NUL       : constant CHARACTER := NUL;       SOH        : constant CHARACTER := SOH;
  235.       STX       : constant CHARACTER := STX;       ETX        : constant CHARACTER := ETX;
  236.       EOT       : constant CHARACTER := EOT;       ENQ        : constant CHARACTER := ENQ;
  237.       ACK       : constant CHARACTER := ACK;       BEL        : constant CHARACTER := BEL;
  238.       BS        : constant CHARACTER := BS;        HT         : constant CHARACTER := HT;
  239.       LF        : constant CHARACTER := LF;        VT         : constant CHARACTER := VT;
  240.       FF        : constant CHARACTER := FF;        CR         : constant CHARACTER := CR;
  241.       SO        : constant CHARACTER := SO;        SI         : constant CHARACTER := SI;
  242.       DLE       : constant CHARACTER := DLE;       DC1        : constant CHARACTER := DC1;
  243.       DC2       : constant CHARACTER := DC2;       DC3        : constant CHARACTER := DC3;
  244.       DC4       : constant CHARACTER := DC4;       NAK        : constant CHARACTER := NAK;
  245.       SYN       : constant CHARACTER := SYN;       ETB        : constant CHARACTER := ETB;
  246.       CAN       : constant CHARACTER := CAN;       EM         : constant CHARACTER := EM;
  247.       SUB       : constant CHARACTER := SUB;       ESC        : constant CHARACTER := ESC;
  248.       FS        : constant CHARACTER := FS;        GS         : constant CHARACTER := GS;
  249.       RS        : constant CHARACTER := RS;        US         : constant CHARACTER := US;
  250.       DEL       : constant CHARACTER := DEL;
  251.  
  252.       -- Other characters:
  253.  
  254.       EXCLAM    : constant CHARACTER := '!';       QUOTATION  : constant CHARACTER := '"';
  255.       SHARP     : constant CHARACTER := '#';       DOLLAR     : constant CHARACTER := '$';
  256.       PERCENT   : constant CHARACTER := '%';       AMPERSAND  : constant CHARACTER := '&';
  257.       COLON     : constant CHARACTER := ':';       SEMICOLON  : constant CHARACTER := ';';
  258.       QUERY     : constant CHARACTER := '?';       AT_SIGN    : constant CHARACTER := '@';
  259.       L_BRACKET : constant CHARACTER := '[';       BACK_SLASH : constant CHARACTER := '\';
  260.       R_BRACKET : constant CHARACTER := ']';       CIRCUMFLEX : constant CHARACTER := '^';
  261.       UNDERLINE : constant CHARACTER := '_';       GRAVE      : constant CHARACTER := '`';
  262.       L_BRACE   : constant CHARACTER := '{';       BAR        : constant CHARACTER := '|';
  263.       R_BRACE   : constant CHARACTER := '}';       TILDE      : constant CHARACTER := '';
  264.  
  265.       -- Lower case letters:
  266.  
  267.       LC_A : constant CHARACTER := 'A';
  268.       ...
  269.       LC_Z : constant CHARACTER := 'Z';
  270.  
  271.    end ASCII;
  272.  
  273.  
  274.        -- Predefined subtypes:
  275.  
  276.        subtype NATURAL  is INTEGER range 0 .. INTEGER'LAST;
  277.        subtype POSITIVE is INTEGER range 1 .. INTEGER'LAST;
  278.  
  279.        -- Predefined string type:
  280.  
  281.        type STRING is array(POSITIVE range <>) of CHARACTER;
  282.  
  283.        pragma PACK(STRING);
  284.  
  285.  
  286.        -- The predefined operators for this type are as follows:
  287.  
  288.        -- function "="  (LEFT, RIGHT : STRING) return BOOLEAN;
  289.        -- function "/=" (LEFT, RIGHT : STRING) return BOOLEAN;
  290.        -- function "<"  (LEFT, RIGHT : STRING) return BOOLEAN;
  291.        -- function "<=" (LEFT, RIGHT : STRING) return BOOLEAN;
  292.        -- function ">"  (LEFT, RIGHT : STRING) return BOOLEAN;
  293.        -- function ">=" (LEFT, RIGHT : STRING) return BOOLEAN;
  294.  
  295.        -- function "&" (LEFT : STRING;    RIGHT : STRING)    return STRING;
  296.        -- function "&" (LEFT : CHARACTER; RIGHT : STRING)    return STRING;
  297.        -- function "&" (LEFT : STRING;    RIGHT : CHARACTER) return STRING;
  298.        -- function "&" (LEFT : CHARACTER; RIGHT : CHARACTER) return STRING;
  299.  
  300.        type DURATION is delta IMPLEMENTATION_DEFINED range IMPLEMENTATION_DEFINED;
  301.  
  302.        -- The predefined operators for the type DURATION are the same as for any fixed point type.
  303.  
  304.  
  305.     -- The predefined exceptions:
  306.  
  307.    CONSTRAINT_ERROR : exception;
  308.    NUMERIC_ERROR    : exception;
  309.    PROGRAM_ERROR    : exception;
  310.    STORAGE_ERROR    : exception;
  311.    TASKING_ERROR    : exception;
  312.  
  313. end STANDARD;
  314.  
  315. Certain  aspects  of the predefined entities cannot be completely described
  316. in the language itself.  For example, although the enumeration type BOOLEAN
  317. can be written showing the two enumeration literals  FALSE  and  TRUE,  the
  318. short-circuit control forms cannot be expressed in the language.
  319.  
  320. Note:
  321.  
  322. The language definition predefines the following library units:
  323.  
  324.     -  The package CALENDAR                         (see 9.6)
  325.  
  326.     -  The package SYSTEM                           (see 13.7)
  327.     -  The package MACHINE_CODE (if provided)       (see 13.8)
  328.     -  The generic procedure UNCHECKED_DEALLOCATION (see 13.10.1)
  329.     -  The generic function UNCHECKED_CONVERSION    (see 13.10.2)
  330.  
  331.     -  The generic package SEQUENTIAL_IO            (see 14.2.3)
  332.     -  The generic package DIRECT_IO                (see 14.2.5)
  333.     -  The package TEXT_IO                          (see 14.3.10)
  334.     -  The package IO_EXCEPTIONS                    (see 14.5)
  335.     -  The package LOW_LEVEL_IO                     (see 14.6)
  336.  
  337.  
  338.  
  339.  
  340.  
  341.  
  342.  
  343.  
  344.  
  345.  
  346.  
  347.  
  348.  
  349.  
  350.  
  351.  
  352.  
  353.  
  354.  
  355.  
  356.  
  357.  
  358.  
  359.  
  360.  
  361.  
  362.  
  363.  
  364.  
  365.  
  366.  
  367.  
  368.  
  369.  
  370.  
  371.  
  372.  
  373.  
  374.  
  375.  
  376.  
  377.  
  378.  
  379.  
  380.  
  381.  
  382.  
  383.  
  384.  
  385.  
  386.  
  387.  
  388.  
  389.  
  390.  
  391.  
  392.  
  393.  
  394.  
  395.